package com.ctvit.cch.core.service;

import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ctvit.cch.core.pojo.domain.InspirationCreation;
import com.ctvit.cch.core.pojo.domain.InspirationRecord;
import com.ctvit.cch.core.pojo.dto.creative.InspirationCreationAddDTO;
import com.ctvit.cch.core.pojo.dto.creative.InspirationCreationMoreDTO;
import com.ctvit.cch.core.pojo.dto.creative.InspirationCreationMyDTO;
import com.ctvit.cch.core.pojo.vo.creative.InspirationCreationListVO;
import com.ctvit.cch.core.pojo.vo.creative.InspirationRecordListVO;

/**
 * 灵感创作表 服务接口
 *
 * @author heyingcheng
 * @date 2025/10/22
 */
public interface IInspirationCreationService extends IService<InspirationCreation> {

    /**
     * 获取当前用户的灵感创作列表
     *
     * @param dto 筛选条件
     * @return 灵感创作列表
     */
    List<InspirationCreationListVO> getMyList(InspirationCreationMyDTO dto);

    /**
     * 新增灵感创作
     *
     * @param dto 灵感创作信息
     * @return 创意ID
     */
    String add(InspirationCreationAddDTO dto);

    /**
     * 更多灵感创作
     *
     * @param dto 灵感创作信息
     * @return 灵感记录列表
     */
    List<InspirationRecordListVO> more(InspirationCreationMoreDTO dto);

    /**
     * 获取灵感创作详情
     *
     * @param id 灵感创作ID
     * @return 灵感创作详情
     */
    InspirationCreationListVO get(String id);

    /**
     * 按状态获取灵感创作列表
     *
     * @param status 状态名称
     * @return 灵感创作列表
     */
    List<InspirationCreationListVO> listByStatus(String status);

    /**
     * 更新灵感创作状态
     *
     * @param creationId 创意ID
     * @param status     创作状态
     * @param records    创作记录
     * 
     * @return 更新结果
     */
    boolean updateStatus(String creationId, String status, List<InspirationRecord> records);

    /**
     * 更新灵感创作状态
     *
     * @param creationId    创意ID
     * @param currentStatus 当前状态
     * @param targetStatus  目标状态
     * 
     * @return 更新结果
     */
    boolean updateStatus(String creationId, String currentStatus, String targetStatus);

    /**
     * 提交灵感创作-灵感
     *
     * @param title       创作标题
     * @param description 创作描述
     * @param fileType    文件类型
     * @param files       文件列表
     * 
     * @return 提交结果
     * @throws IOException
     * @throws UncheckedIOException
     */
    String submitInsp(String title, String description, String fileType, List<MultipartFile> files)
            throws UncheckedIOException, IOException;

    /**
     * 提交灵感创作-创意
     *
     * @param ideaId 引用ID
     * @return 提交结果
     */
    String submitIdea(String refId);

    /**
     * 提交灵感创作-热点
     *
     * @param recordId 引用ID
     * @return 提交结果
     */
    String submitHot(String refId);

}